class Assignment < Event
  belongs_to :user
  belongs_to :course
  has_many :assignment_answers, :dependent => :destroy
  has_one :event_blob, :foreign_key => 'event_id', :dependent => :destroy

  validates_presence_of :name, :message => 'La asignación debe tener un nombre.'
  validates_presence_of :course, :message => '¡No estoy asociado con ning&uacute;n curso!'
  validates_numericality_of :weight, :message => 'La ponderación debe ser un número entre 0 y 1.'
  validates_presence_of :weight, :message => 'Debes asignar una ponderaci&oacute;n a la asignaci&oacute;n.'

  def average
    return @average if not @average.nil?
    sum = 0
    count = 0
    assignment_answers.each do |answer|
      sum +=answer
      count+=1
    end
    @average = sum / count
    @average
  end

  def missing_users
    total_users = course.users.size
    total_users - assignment_answers.size
  end

  def has_ungraded_answers?
    for ans in assignment_answers
      if ans.grader.nil?
        return true
      end
    end
    return false
  end

  def validate
    if not weight.nil? and ( weight < 0.0 or weight > 1.0 )
      errors.add(:weight, "La ponderación debe estar entre 0 y 1.")
    end
    errors.add("expire_date","La fecha de expiración debe ocurrir después de la fecha de inicio.") unless expire_date > due_date 
  end
end
